912. Количество предложений

 

Определить количество предложений в заданном фрагменте текста.

 

Вход. В одной строке задан фрагмент текста на английском языке, количество символов в котором не превышает 250. Гарантируется, что в тексте отсутствуют тире, дефисы, цифры и числа.

 

Выход. Вывести количество предложений в фрагменте.

 

Пример входа

Пример выхода

Hello world!

1

 

 

РЕШЕНИЕ

строки

 

Анализ алгоритма

Предложение может завершаться одним из следующих знаков: точкой, восклицательным или вопросительным знаком. В конце предложения могут стоять несколько знаков препинания – например троеточие или три восклицательных знака. Поэтому конец предложения будем отслеживать так: текущий символ должен быть одним из '.', '!', '?', а предыдущий символ таковым являться не должен. То есть входной текст содержит столько предложений, сколько имеется пар стоящих рядом символов, что второй из них принадлежит множеству {'.', '!', '?'}, а первый нет.

 

Реализация алгоритма

Читаем посимвольно входные данные. В переменной cnt подсчитываем количество предложений.

 

prev = cnt = 0;

while(scanf("%c",&ch), ch != '\n')

{

 

Переменная ch содержит текущий символ, а prev предыдущий. Предложение считается законченным, если мы достигли одного из трех знаков препинания, а предыдущий символ таковым не является.

 

  if ((ch == '.' || ch == '!' || ch == '?') &&

     !(prev == '.' || prev == '!' || prev == '?')) cnt++;

  prev = ch;

}

 

Выводим количество предложений.

 

printf("%d\n",cnt);

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    String s =  con.nextLine();

   

    int cnt = 0;

    for(int i = 0; i < s.length() - 1; i++)

    {

      if ((s.charAt(i+1) == '.' || s.charAt(i+1) == '!' ||

           s.charAt(i+1) == '?') &&

         !(s.charAt(i) == '.'   || s.charAt(i) == '!'   ||

           s.charAt(i) == '?')) cnt++;

    }

    System.out.println(cnt);

  }

}